import java.util.Scanner;
public class javase06 {
//    2. 实现代码: 递归求 N 的阶乘
public static long func(long n) {
    if(n == 1) {
        return 1;
    }
    return n*func(n-1);
}

public static void main123(String[] args) {
    while(true) {
        Scanner sc = new  Scanner(System.in);
        long n = sc.nextInt();
        System.out.println(func(n));
    }
}
//3. 实现代码: 递归求 1 + 2 + 3 + ... + 10
public static int sum(int n) {
    if(n == 1) return 1;
    return n + sum(n-1);
}
public static void main12345(String[] args) {
    while(true) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(sum(n));
    }
}
//            4. 实现代码: 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    public static void print (int n) {
    if(n > 10) {
        print(n/10);
    }
        System.out.print(n%10 + " ");
    }

public static void main1234567(String[] args) {
    while(true) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        print(n);
    }
}
//5. 实现代码: 写一个递归方法，输入一个非负整数，返回组成它的数字之和.
public static int  sum2(int a) {

    if(a < 10) {
        return a;
    }
    return a%10 + sum2(a/10);
}
public static void main654347(String[] args) {
    while(true) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println(sum2(a));
    }
}
//6. 实现代码: 求斐波那契数列的第 N 项
    public static int fib(int n) {
    if(n == 1 || n== 2) {
        return 1;
    }
    return fib(n-2)+fib(n-1);
    }

public static void main1123(String[] args) {
    while(true) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(fib(n));
    }
}
//7. 实现代码: 求解汉诺塔问题(提示, 使用递归)
public static void h(int n , char a , char b ,char c) {
    if(n == 1) {
        System.out.println(a + "——>" + c);
    }else {
        h(n-1,a,c,b);
        System.out.println(a + "——>" + c);
        h(n-1,b,a,c);
    }
}
public static void main454321(String[] args) {
    while(true) {
        char a = 'a';
        char b = 'b';
        char c= 'c';
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        h(n, a,b,c);
    }
}
//    汉诺塔问题是一个经典的问题。汉诺塔（Hanoi Tower），又称河内塔，源于印度一个古老传说。
//    大梵天创造世界的时候做了三根金刚石柱子，在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
//    大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
//    并且规定，任何时候，在小圆盘上都不能放大圆盘，且在三根柱子之间一次只能移动一个圆盘。
//    问应该如何操作？
//            8. 实现代码: 青蛙跳台阶问题(提示, 使用递归)
//    一只青蛙一次可以跳上 1 级台阶，也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法

    public static int Flog (int n) {
    if(n<=3) {
        return n;
    }
    return Flog(n-2) + Flog(n-1);
    }
public static void main45u(String[] args) {
    while(true) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(Flog(n));
    }
}
}
